home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / mach / ds5000.md / mach.h < prev    next >
C/C++ Source or Header  |  1991-07-26  |  7KB  |  196 lines

  1. /*
  2.  * mach.h --
  3.  *
  4.  *         Exported structures for the mach module.
  5.  *
  6.  *    Copyright (C) 1989 Digital Equipment Corporation.
  7.  *    Permission to use, copy, modify, and distribute this software and
  8.  *    its documentation for any purpose and without fee is hereby granted,
  9.  *    provided that the above copyright notice appears in all copies.
  10.  *    Digital Equipment Corporation makes no representations about the
  11.  *    suitability of this software for any purpose.  It is provided "as is"
  12.  *    without express or implied warranty.
  13.  *
  14.  * $Header: /sprite/src/kernel/mach/ds5000.md/RCS/mach.h,v 1.4 91/07/26 17:08:36 shirriff Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _MACH
  18. #define _MACH
  19.  
  20. #ifdef KERNEL
  21. #include <machTypes.h>
  22. #include <machAddrs.h>
  23. #include <user/fmt.h>
  24. #else
  25. #include <kernel/machTypes.h>
  26. #include <kernel/machAddrs.h>
  27. #include <fmt.h>
  28. #endif
  29.  
  30. /*
  31.  * Macros to disable and enable interrupts.
  32.  */
  33. #define DISABLE_INTR() \
  34.     if (!Mach_AtInterruptLevel()) { \
  35.     Mach_DisableIntr(); \
  36.     if (mach_NumDisableIntrsPtr[0] < 0) { \
  37.         panic("Negative interrupt count.\n"); \
  38.     } \
  39.     mach_NumDisableIntrsPtr[0]++; \
  40.     }
  41. #define ENABLE_INTR() \
  42.     if (!Mach_AtInterruptLevel()) { \
  43.     mach_NumDisableIntrsPtr[0]--; \
  44.     if (mach_NumDisableIntrsPtr[0] < 0) { \
  45.         panic("Negative interrupt count.\n"); \
  46.     } \
  47.     if (mach_NumDisableIntrsPtr[0] == 0) { \
  48.         Mach_EnableIntr(); \
  49.     } \
  50.     }
  51.  
  52. /*
  53.  * Macro to get level of nesting of disabled interrupts.
  54.  */
  55. #define Mach_IntrNesting(cpu) (mach_NumDisableIntrsPtr[(cpu)])
  56.  
  57. /*
  58.  * A macro to test if the current processor is at interrupt level.
  59.  */
  60. #define    Mach_AtInterruptLevel()    (mach_AtInterruptLevel)
  61.  
  62. /*
  63.  * A macro to test if the current processor is in kernel mode.
  64.  */
  65. #define    Mach_KernelMode() (mach_KernelMode)
  66.  
  67. /*
  68.  * Delay for N microseconds.
  69.  */
  70. #define    MACH_DELAY(n)    { register int N = (n)*6; while (N > 0) {N--;} }
  71.  
  72. /*
  73.  * Convert an address in cached space to an address in uncached space.
  74.  */
  75.  
  76. #define MACH_UNCACHED_ADDR(addr) \
  77.     (Address) ((int) addr - MACH_CACHED_MEMORY_ADDR + MACH_UNCACHED_MEMORY_ADDR)
  78.  
  79. extern Mach_State *machCurStatePtr;
  80. /*
  81.  * Macro to get the user's stack pointer.
  82.  */
  83. #define Mach_UserStack()\
  84.     ((Address)(machCurStatePtr->userState.regState.regs[SP]))
  85.  
  86. /*
  87.  * Dispatch tables for kernel calls.
  88.  */
  89. extern ReturnStatus (*(mach_NormalHandlers[]))();
  90. extern ReturnStatus (*(mach_MigratedHandlers[]))();
  91.  
  92. /*
  93.  * Macro to get processor number
  94.  */
  95. #define    Mach_GetProcessorNumber()     0
  96.  
  97. extern    Boolean    mach_KernelMode;
  98. extern    int    mach_NumProcessors;
  99. extern    Boolean    mach_AtInterruptLevel;
  100. extern    int    *mach_NumDisableIntrsPtr;
  101. /*
  102.  * mach_MachineType is a string used to expand $MACHINE in pathnames.
  103.  */
  104. extern    char    *mach_MachineType;
  105.  
  106. /*
  107.  * mach_Format defines a byte ordering/structure alignment type
  108.  * used when servicing IOControls.  The input and output buffers for
  109.  * IOControls have to be made right by the server.
  110.  */
  111. extern    Fmt_Format    mach_Format;
  112.  
  113. /*
  114.  * Routine to initialize mach module.  Must be called first as part of boot
  115.  * sequence.
  116.  */
  117. extern void Mach_Init _ARGS_((int boot_argc, MachStringTable *boot_argv));
  118.  
  119. /*
  120.  * Routines to munge machine state struct.
  121.  */
  122. extern void Mach_InitFirstProc _ARGS_((Proc_ControlBlock *procPtr));
  123. extern ReturnStatus Mach_SetupNewState _ARGS_((Proc_ControlBlock *procPtr, Mach_State *fromStatePtr, void (*startFunc)(), Address startPC, Boolean user));
  124. extern void Mach_SetReturnVal _ARGS_((Proc_ControlBlock *procPtr, int retVal,
  125.     int retVal2));
  126. extern void Mach_StartUserProc _ARGS_((Proc_ControlBlock *procPtr, Address entryPoint));
  127. extern void Mach_ExecUserProc _ARGS_((Proc_ControlBlock *procPtr, Address userStackPtr, Address entryPoint));
  128. extern void Mach_FreeState _ARGS_((Proc_ControlBlock *procPtr));
  129. extern void Mach_CopyState _ARGS_((Mach_State *statePtr, Proc_ControlBlock *destProcPtr));
  130. extern void Mach_GetDebugState _ARGS_((Proc_ControlBlock *procPtr, Proc_DebugState *debugStatePtr));
  131. extern void Mach_SetDebugState _ARGS_((Proc_ControlBlock *procPtr, Proc_DebugState *debugStatePtr));
  132. extern Address Mach_GetUserStackPtr _ARGS_((Proc_ControlBlock *procPtr));
  133.  
  134. /*
  135.  * Migration routines.
  136.  */
  137. extern ReturnStatus Mach_EncapState _ARGS_((register Proc_ControlBlock *procPtr, int hostID, Proc_EncapInfo *infoPtr, Address buffer));
  138. extern ReturnStatus Mach_DeencapState _ARGS_((register Proc_ControlBlock *procPtr, Proc_EncapInfo *infoPtr, Address buffer));
  139. extern ReturnStatus Mach_GetEncapSize _ARGS_((Proc_ControlBlock *procPtr, int hostID, Proc_EncapInfo *infoPtr));
  140. extern Boolean Mach_CanMigrate _ARGS_((Proc_ControlBlock *procPtr));
  141. extern int Mach_GetLastSyscall _ARGS_((void));
  142.  
  143.  
  144. /*
  145.  * Other routines.
  146.  */
  147. extern void Mach_InitSyscall _ARGS_((int callNum, int numArgs, ReturnStatus (*normalHandler)(), ReturnStatus (*migratedHandler)()));
  148.  
  149. extern int Mach_GetNumProcessors _ARGS_((void));
  150. extern Mach_ProcessorStates Mach_ProcessorState _ARGS_((int processor));
  151. extern Address            Mach_GetPC();
  152. extern void        Mach_SetHandler _ARGS_((int level, void (*handler)(
  153.                 unsigned int statusReg, unsigned int causeReg,
  154.                 Address pc, ClientData data), ClientData data));
  155. /*
  156.  * Machine dependent routines.
  157.  */
  158. extern void        Mach_SetIOHandler _ARGS_((int level, void (*handler)(
  159.                  ClientData data), ClientData data));
  160.  
  161. extern    void        Mach_ContextSwitch();
  162. extern    int        Mach_TestAndSet();
  163. extern int Mach_GetMachineArch _ARGS_((void));
  164. extern int Mach_GetMachineType _ARGS_((void));
  165. extern Address Mach_GetStackPointer _ARGS_((Proc_ControlBlock *procPtr));
  166. extern void Mach_CheckSpecialHandling _ARGS_((int pnum));
  167. extern int Mach_GetBootArgs _ARGS_((int argc, int bufferSize, char **argv, char *buffer));
  168. extern  ReturnStatus    Mach_Probe _ARGS_((int size, Address srcAddress,
  169.                     Address, destAddress));
  170. extern  ReturnStatus    Mach_ProbeAddr _ARGS_((int numArgs));
  171. extern void Mach_FlushCode _ARGS_((Address addr, unsigned len));
  172. extern ReturnStatus Mach_GetSlotInfo _ARGS_((char *romAddr, 
  173.             Mach_SlotInfo *infoPtr));
  174. extern void Mach_Return2 _ARGS_((int val));
  175. extern int Mach_SigreturnStub _ARGS_((struct sigcontext *sigContextPtr));
  176.  
  177. /*
  178.  * Machine dependent variables.
  179.  */
  180. extern    Address    mach_KernStart;
  181. extern    Address    mach_CodeStart;
  182. extern    Address    mach_StackBottom;
  183. extern    int    mach_KernStackSize;
  184. extern    Address    mach_KernEnd;
  185. extern    Address    mach_FirstUserAddr;
  186. extern    Address    mach_LastUserAddr;
  187. extern    Address    mach_MaxUserStackAddr;
  188. extern    int    mach_LastUserStackPage;
  189.  
  190. /*
  191.  * Set the errno for Unix compatible system calls.
  192.  */
  193. #define Mach_SetErrno(err) Proc_GetActualProc()->unixErrno = (err)
  194.  
  195. #endif /* _MACH */
  196.